
'''

'''

class Solution:
    def __init__(self):
        self.path=[]
        self.result=[]
    def permute(self,nums):
        '''
        因为本体排列时有序的 这意味着同一层的元素时可以重复使用的 单统一树枝上不能重复使用 used
        所以处理排列问题每层都需要从头搜索 故不再使用 start_index
        '''
        used=[False]*len(nums)
        self.backtracking(nums,used)
        return self.result

    def backtracking(self,nums, used):
        # Base Case 本题求叶子节点
        if len(self.path)==len(nums):
            self.result.append(self.path[:])
            return
        #  单层递归逻辑
        for i in range(0,len(nums)):# 从头开始搜索
            # 若遇到self.path 里面已经收录的元素 跳过
            if used[i]==True:
                continue
            used[i]=True
            self.path.append(nums[i])
            self.backtracking(nums,used)  # 纵向传递使用信息 去重
            self.path.pop()
            used[i]=False
